package com.odontosis.entidade;

import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@SuppressWarnings("serial")
@Entity
@Table(name = "servicoconveniado")
public class ServicoConveniado extends OdontosisBusinessObject {
	
	@Column(name ="valor")
	private Double valor;
	
	@ManyToOne
	@JoinColumn(name = "paciente")
	private Paciente paciente;
	
	@Enumerated(EnumType.STRING)
	private Convenio convenio;
	
	@Column(name = "parcela")
	private Integer parcela;
	
	@Column(name = "fiod")
	private String fiod;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data")
	private Date data; //data de referência
	
	@Temporal(TemporalType.DATE)
	@Column(name = "datapericia")
	private Date dataPericia;
	
	@Column(name = "guiaassinada")
	private boolean guiaAssinada;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data_cadastro")
	private Date dataHoraCadastro;
	
	@ManyToOne
	@JoinColumn(name = "usuario_cadastro")
	private Usuario usuario;
	
	@ManyToOne
	@JoinColumn(name = "usuario_alteracao")
	private Usuario usuarioUltimaAlteracao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data_alteracao")
	private Date dataHoraAlteracao;
	
	@ManyToMany(fetch = FetchType.EAGER)
	@Cascade(value = {org.hibernate.annotations.CascadeType.ALL, CascadeType.DELETE_ORPHAN})
	@JoinTable(name = "servicoconveniado_procedimento", joinColumns = @JoinColumn(name = "servicoconveniado"), inverseJoinColumns = @JoinColumn(name = "procedimento"))
	private Set<Procedimento> listaProcedimentos;

	public Double getValor() {
		return valor;
	}

	public Paciente getPaciente() {
		return paciente;
	}

	public Convenio getConvenio() {
		return convenio;
	}

	public Integer getParcela() {
		return parcela;
	}

	public String getFiod() {
		return fiod;
	}

	public Date getData() {
		return data;
	}

	public Set<Procedimento> getListaProcedimentos() {
		return listaProcedimentos;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}

	public void setConvenio(Convenio convenio) {
		this.convenio = convenio;
	}

	public void setParcela(Integer parcela) {
		this.parcela = parcela;
	}

	public void setFiod(String fiod) {
		this.fiod = fiod;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public void setListaProcedimentos(Set<Procedimento> listaProcedimentos) {
		this.listaProcedimentos = listaProcedimentos;
	}

	public Date getDataPericia() {
		return dataPericia;
	}

	public boolean isGuiaAssinada() {
		return guiaAssinada;
	}

	public void setDataPericia(Date dataPericia) {
		this.dataPericia = dataPericia;
	}

	public void setGuiaAssinada(boolean guiaAssinada) {
		this.guiaAssinada = guiaAssinada;
	}

	public Date getDataHoraCadastro() {
		return dataHoraCadastro;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setDataHoraCadastro(Date dataHoraCadastro) {
		this.dataHoraCadastro = dataHoraCadastro;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Usuario getUsuarioUltimaAlteracao() {
		return usuarioUltimaAlteracao;
	}

	public Date getDataHoraAlteracao() {
		return dataHoraAlteracao;
	}

	public void setUsuarioUltimaAlteracao(Usuario usuarioUltimaAlteracao) {
		this.usuarioUltimaAlteracao = usuarioUltimaAlteracao;
	}

	public void setDataHoraAlteracao(Date dataHoraAlteracao) {
		this.dataHoraAlteracao = dataHoraAlteracao;
	}
	
	
	
	
	
}
